1
ปัญหาความเร็ว: ทำไมโค้ดที่ถูกต้องจึงทำงานช้า
AI023Lesson 6
00:00

ความ ปัญหาความเร็ว ระบุว่าเคอร์เนลที่สมบูรณ์แบบทางคณิตศาสตร์ เช่น $out = x + y$ อาจมีประสิทธิภาพแย่กว่าการวนซ้ำบนโปรเซสเซอร์ (CPU) หากไม่สามารถกระจายต้นทุนคงที่ของฮาร์ดแวร์กราฟิกได้อย่างเหมาะสม ซึ่งมักปรากฏในรูปแบบของ ภาษีการเปิดใช้งาน.

1. ข้อผิดพลาดเรื่อง "ความถูกต้อง"

ความถูกต้องตามหน้าที่ไม่ได้หมายความถึงประสิทธิภาพ แม้ว่าโค้ดทริตอนของคุณจะแจกจ่ายงานอย่างถูกต้องไปยังหลายพันเธรด แต่หากปริมาณงานทั้งหมด (N) มีขนาดเล็ก ก็จะทำให้หน่วยประมวลผลกราฟิก (GPU) ไม่ได้ใช้งานเต็มที่ ฮาร์ดแวร์จะใช้เวลานานในการเปลี่ยนสถานะมากกว่าการคำนวณจริง

2. กลเม็ดการวัดผลจากภาษาไพธอน

การทดสอบประสิทธิภาพโค้ดกราฟิกจากภาษาไพธอนโดยใช้ time.time() เป็นอันตราย เพราะการเรียกใช้กราฟิก (GPU) เป็น แบบไม่สัมพันธ์เวลา; ไพธอนเพียงแค่ ใส่ลงในคิว คำสั่งแล้วดำเนินการต่อไป ถ้าไม่มี torch.cuda.synchronize()คุณจะวัดเวลาที่รอคิว แต่หากมีการซิงโครไนซ์ คุณจะวัด เวลาหน่วงระหว่างโฮสต์กับอุปกรณ์ซึ่งมักยาวกว่าการประมวลผลเคอร์เนลเองถึง 10 เท่า

ต้นทุนจากไพธอน/ไดรเวอร์ (ภาษีการเปิดใช้งาน)เคอร์เนลเวลา (มิลลิวินาที)

3. เวลาหน่วงเทียบกับอัตราการไหล

เพื่อแก้ไขปัญหานี้ คุณต้องมีงานเพียงพอเพื่อ 'ซ่อน' เวลาหน่วงการเปิดใช้งาน นี่คือการเปลี่ยนแปลงจากโหมดที่จำกัดด้วย จำกัดด้วยเวลาหน่วง โหมด (จำกัดด้วยแบนด์วิดธ์ระหว่างโปรเซสเซอร์และกราฟิก) สู่โหมดที่จำกัดด้วย จำกัดด้วยอัตราการไหล โหมด (จำกัดด้วยหน่วยความจำหรือการประมวลผลของกราฟิก)

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>